
const https = require('https')
const SQLHelper = require('./SQLHelper')
const { formatTime } = require('./util')
//雪花算法生成id
const snowflake = require('./snowflake')

const multer = require('multer')
const { type } = require('os')
const storage = multer.diskStorage({
    destination: './uploads',
    filename: function (req, file, cb) {
        //获取图片类型
        let fileType = file.originalname.split('.')
        fileType = fileType[fileType.length - 1]
      cb(null, snowflake() + '.' + fileType)
    }
  })
  
  const upload = multer({ storage: storage })
 
module.exports = function (app) {

    //登录拦截中间件
    function loginRouter(req, res, next) {
        if (req.method.toUpperCase() == 'OPTIONS') {
            next()
            return;
        }
        let token = req.headers.token
        if (token) {
            SQLHelper(`select * from session where id = ${token} and state = 1`).then(ret => {
                if (ret.length) {
                    let session = ret[0]
                    //2h
                    if (new Date().getTime() - session.createTime < 2 * 60 * 60 * 1000) {
                        req.session = {
                            userId: session.userId,
                            userName: session.userName
                        }
                        next()
                    } else {
                        res.status(400).send({ errorMsg: '登录超时' })
                    }

                }
                else {
                    res.status(400).send({ errorMsg: '当前用户未登录' })
                }
            })


        } else {
            res.status(400).send({ errorMsg: '缺少token,请先进行登录' })
        }

    }

    //让除了登录以外的所有小程序接口都先进行验证登录
    app.use('/admin', loginRouter)

    //文件上传
    app.post('/upload',upload.single('file'),(req,res) =>{
        res.send(req.file)
    })

    //管理后台登陆

    app.post('/login', (req, res) => {

        let userName = req.body.userName
        let passWord = req.body.passWord
        if (userName && passWord) {
            SQLHelper(`
        select * from user where userName = '${userName}'
        `).then(users => {
                if (users.length) {//正常登录
                    let user = users[0]
                    if (passWord == user.passWord) {
                        let token = snowflake()//token通过雪花算法获得
                        //缓存到token到session表
                        SQLHelper(`
                    INSERT INTO session(id,userId,userName,inTime,createTime,platform) 
                    VALUES ('${token}','${user._id}','${user.nickName}','${formatTime(new Date())}',${new Date().getTime()},'admin')
                    `).then(ret => {
                            res.send({
                                nickName: user.nickName,
                                token,
                                avatarUrl: user.photo,
                                _id: user._id
                            })
                        })
                    } else {
                        res.send({ errorMsg: '密码错误' })
                    }
                } else {
                    res.send({ errorMsg: '当前用户不存在' })
                }
            })

        } else {
            res.send({ errorMsg: '用户名和密码不能为空' })
        }
    })
    //退出登录
    app.get('/admin/logout', (req, res) => {
        SQLHelper(`
            update session set outTime = '${formatTime(new Date())}' ,state = 0 
            where id = '${req.headers.token}'
    `).then(ret => {
            res.send({ msg: '退出登录成功' })
        })
    })
    //修改密码
    app.post('/admin/changePassWord', (req, res) => {
        let userId = req.session.userId
        let passWord = req.body.passWord
        let newPassWord = req.body.newPassWord
        if (passWord && newPassWord) {
            //查询用户
            SQLHelper(`select passWord from user where _id = ${userId}
        `).then(users => {
                let user = users[0]
                //比对原密码
                if (user.passWord == passWord) {
                    //修改密码
                    SQLHelper(`update user set passWord = '${newPassWord}' where _id = ${userId} `).then(ret => {
                        res.send({ msg: '修改密码成功' })
                    })
                } else {
                    res.send({ errorMsg: '原密码错误' })
                }
            })
        } else {
            res.send({ errorMsg: '原密码和新密码不能为空' })
        }
    })
    //获取首页项目列表
    //pageSize 每页大小 默认10
    //pageNum 当前页 默认1
    app.get('/admin/index', (req, res) => {
        let pageSize = req.query.pageSize || 10
        let pageNum = req.query.pageNum || 1
        let offset = (pageNum - 1) * pageSize
        let title = req.query.title
        let type = req.query.type
        let whereSql = 'from index_region where state = 1'
        //按类型查询
        if(type) whereSql += ` and type = '${type}'`
        //按标题关键字搜索
        if (title) whereSql += ` and title like "%${title}%"`
        SQLHelper(`
    select count(*) as total ${whereSql};
    select * ${whereSql}
    limit ${pageSize} offset ${offset}
    `).then(ret => {
            console.log(ret)
            res.send({
                total: ret[0][0].total,
                rows: ret[1]
            })
        })
    })

    //新增轮播图
    //img 图片地址 必填
    //url 链接地址  非必填
    //title 标题 轮播图不填，其他必填
    //status 是否启用 非必填 1启用，0停用
    //type 类型 非必填 banner(默认)轮播图 ，category分类，recommend为你推荐
    app.post('/admin/index', (req, res) => {
        let img =req.body.img,url = req.body.url,status = req.body.status
        let type = req.body.type || 'banner',title = req.body.title
        if(type != 'banner' && !title){
            res.send({errorMsg:'标题不能为空'})
            return
        }
        if(status !=1) status = 0//默认启用
        if (img) {
            let createTime = new Date().getTime()
            SQLHelper(`
                INSERT INTO index_region(title,img,url,status,state,createTime,unitId,type) 
                VALUES ('${title}','${img}','${url}','${status}',1,${createTime},'juzao','${type}')
                `).then(ret => {
                res.send(ret.insertId ? {_id:ret.insertId} : {errorMsg:"新增数据失败"})
            })
        } else {
            res.send({ errorMsg: '传入参数错误' })
        }
    })

    //修改首页项目
//indexId 主码_id 必填
 app.put('/admin/index',(req,res) => { 
    if (req.body.indexId) {
        let updateTime = new Date().getTime()
        let updateKey = ['img','url','title','status']
        let updateValues = [`updateTime=${updateTime}`]
        for(let i=0;i<updateKey.length;i++){
            let key = updateKey[i], value = req.body[key]
            if(value !== undefined) updateValues.push(`${key}='${value}'`)
        }
        SQLHelper(`UPDATE index_region set ${updateValues.join(',')} WHERE _id = ${req.body.indexId}`).then(ret => {
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

//删除 逻辑删
//indexId 主码_id 必填
app.delete('/admin/index',(req,res) =>{
    let indexId = req.query.indexId
    if(indexId){
        SQLHelper(`
        UPDATE index_region
        set state = 0
        WHERE _id = ${indexId}
        `).then(ret =>{
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

    //获取新闻项目列表
    //pageSize 每页大小 默认10
    //pageNum 当前页 默认1
    app.get('/admin/xinwen/news', (req, res) => {
        let pageSize = req.query.pageSize || 10
        let pageNum = req.query.pageNum || 1
        let offset = (pageNum - 1) * pageSize
        let title = req.query.title
        let type = req.query.type
        let whereSql = 'from article where state = 1'
        //按类型查询
        if(type) whereSql += ` and type = '${type}'`
        //按标题关键字搜索
        if (title) whereSql += ` and title like "%${title}%"`
        SQLHelper(`
        select count(*) as total ${whereSql};
        select * ${whereSql}
        limit ${pageSize} offset ${offset}
        `).then(ret => {
            console.log(ret)
            res.send({
                total: ret[0][0].total,
                rows: ret[1]
            })
        })
    })

        //新增新闻
    //img 图片地址 必填
    //title 标题 轮播图不填，其他必填
    //status 是否启用 非必填 1启用，0停用
    //type 类型 非必填 news(默认)新闻 ，category分类，recommend为你推荐
    app.post('/admin/xinwen/news', (req, res) => {
        let img =req.body.img,digest= req.body.digest,status = req.body.status
        let type = req.body.type || 'news',title = req.body.title
        if(type != 'news' && !title){
            res.send({errorMsg:'标题不能为空'})
            return
        }
        if(status !=1) status = 0//默认启用
        if (img) {
            let createTime = new Date().getTime()
            SQLHelper(`
                INSERT INTO article(title,img,digest,status,state,createTime,unitId,type) 
                VALUES ('${title}','${img}','${digest}','${status}',1,${createTime},'juzao','${type}')
                `).then(ret => {
                res.send(ret.insertId ? {_id:ret.insertId} : {errorMsg:"新增数据失败"})
            })
        } else {
            res.send({ errorMsg: '传入参数错误' })
        }
    })

//修改新闻项目
//indexId 主码_id 必填
 app.put('/admin/xinwen/news',(req,res) => { 
    if (req.body.indexId) {
        let updateTime = new Date().getTime()
        let updateKey = ['img','title','digest','status']
        let updateValues = [`updateTime=${updateTime}`]
        for(let i=0;i<updateKey.length;i++){
            let key = updateKey[i], value = req.body[key]
            if(value !== undefined) updateValues.push(`${key}='${value}'`)
        }
        SQLHelper(`UPDATE article set ${updateValues.join(',')} WHERE _id = ${req.body.indexId}`).then(ret => {
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

//删除新闻 逻辑删
//indexId 主码_id 必填
app.delete('/admin/xinwen/news',(req,res) =>{
    let indexId = req.query.indexId
    if(indexId){
        SQLHelper(`
        UPDATE article
        set state = 0
        WHERE _id = ${indexId}
        `).then(ret =>{
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

    //获取商品品牌列表
    //pageSize 每页大小 默认10
    //pageNum 当前页 默认1
    app.get('/admin/shangpin/pinpai', (req, res) => {
        let pageSize = req.query.pageSize || 10
        let pageNum = req.query.pageNum || 1
        let offset = (pageNum - 1) * pageSize
        let name = req.query.name

        let whereSql = 'from brand where state = 1'
        // // //按类型查询
        // if(name) whereSql += ` and name = '${name}'`
        //按标题关键字搜索
        if (name) whereSql += ` and name like "%${name}%"`
        SQLHelper(`
        select count(*) as total ${whereSql};
        select * ${whereSql}
        limit ${pageSize} offset ${offset}
        `).then(ret => {
                console.log(ret)
                res.send({
                    total: ret[0][0].total,
                    rows: ret[1]
                })
            })
    })

    //新增商品品牌
    //img 图片地址 必填
    //name 品牌 必填
    app.post('/admin/shangpin/pinpai', (req, res) => {
        let img =req.body.img
        ,name = req.body.name
        if (img) {
            let createTime = new Date().getTime()
            SQLHelper(`
                INSERT INTO brand(img,name,state,createTime,unitId) 
                VALUES ('${img}','${name}',1,${createTime},'juzao')
                `).then(ret => {
                res.send(ret.insertId ? {_id:ret.insertId} : {errorMsg:"新增数据失败"})
            })
        } else {
            res.send({ errorMsg: '传入参数错误' })
        }
    })

//     //修改品牌项目
// //indexId 主码_id 必填
 app.put('/admin/shangpin/pinpai',(req,res) => { 
    if (req.body.indexId) {
        let updateTime = new Date().getTime()
        let updateKey = ['img','name']
        let updateValues = [`updateTime=${updateTime}`]
        for(let i=0;i<updateKey.length;i++){
            let key = updateKey[i], value = req.body[key]
            if(value !== undefined) updateValues.push(`${key}='${value}'`)
        }
        SQLHelper(`UPDATE brand set ${updateValues.join(',')} WHERE _id = ${req.body.indexId}`).then(ret => {
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

// //删除品牌 逻辑删
// //indexId 主码_id 必填
app.delete('/admin/shangpin/pinpai',(req,res) =>{
    let indexId = req.query.indexId
    if(indexId){
        SQLHelper(`
        UPDATE brand
        set state = 0
        WHERE _id = ${indexId}
        `).then(ret =>{
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

    //获取商品单品列表
    //pageSize 每页大小 默认10
    //pageNum 当前页 默认1
    app.get('/admin/shangpin/danpin', (req, res) => {
        let pageSize = req.query.pageSize || 10
        let pageNum = req.query.pageNum || 1
        let offset = (pageNum - 1) * pageSize
        let productName = req.query.productName
        // let skuId =req.query.skuId
        let whereSql = 'from sku where state = 1'
        // //按类型查询
        // if(productName) whereSql += ` and productName = '${productName}'`
        //按标题关键字搜索
        if (productName) whereSql += ` and productName like "%${productName}%"`
        SQLHelper(`
        select count(*) as total ${whereSql};
        select * ${whereSql}
        limit ${pageSize} offset ${offset}
        `).then(ret => {
            console.log(ret)
            res.send({
                total: ret[0][0].total,
                rows: ret[1]
            })
        })
    })

    // //新增单品
    // //imgs 图片地址 必填

    app.post('/admin/shangpin/danpin', (req, res) => {
        let imgs= req.body.imgs, skuId= req.body.skuId,salePrice = req.body.salePrice
        let originalPrice=req.body.originalPrice, productName = req.body.productName,props = req.body.props
        
        if (imgs) {
            let createTime = new Date().getTime()
            SQLHelper(`
                INSERT INTO sku(imgs,skuId,salePrice,productName,originalPrice,state,unitId,props) 
                VALUES ('${imgs}','${skuId}','${salePrice}','${productName}','${originalPrice}',1,'juzao','${props}')
                `).then(ret => {
                res.send(ret.insertId ? {_id:ret.insertId} : {errorMsg:"新增数据失败"})
            })
        } else {
            res.send({ errorMsg: '传入参数错误' })
        }
    })
    
//修改单品项目
//indexId 主码_id 必填
 app.put('/admin/shangpin/danpin',(req,res) => { 
    if (req.body.indexId) {
        let updateTime = new Date().getTime()
        let updateKey = ['imgs','skuId','salePrice','productName','originalPrice','props']
        let updateValues = [`updateTime=${updateTime}`]
        for(let i=0;i<updateKey.length;i++){
            let key = updateKey[i], value = req.body[key]
            if(value !== undefined) updateValues.push(`${key}='${value}'`)
        }
        SQLHelper(`UPDATE sku set ${updateValues.join(',')} WHERE _id = ${req.body.indexId}`).then(ret => {
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

 //删除单品 逻辑删
 //indexId 主码_id 必填
app.delete('/admin/shangpin/danpin',(req,res) =>{
    let indexId = req.query.indexId
    if(indexId){
        SQLHelper(`
        UPDATE sku
        set state = 0
        WHERE _id = ${indexId}
        `).then(ret =>{
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

    //获取商品列表
    //pageSize 每页大小 默认10
    //pageNum 当前页 默认1
    app.get('/admin/shangpin/shangpin', (req, res) => {
        let pageSize = req.query.pageSize || 10
        let pageNum = req.query.pageNum || 1
        let offset = (pageNum - 1) * pageSize
        let brandId = req.query.brandId
        let whereSql = 'from product where state = 1'
        //按品牌查询
        if(brandId) whereSql += ` and brandId = '${brandId}'`
        SQLHelper(`
        select count(*) as total ${whereSql};
        select * ${whereSql}
        limit ${pageSize} offset ${offset}
        `).then(ret => {
            console.log(ret)
            res.send({
                total: ret[0][0].total,
                rows: ret[1]
            })
        })
    })

        //新增商品
    //img 图片地址 必填
    //status 是否上架 非必填 1上架，0未上架
    app.post('/admin/shangpin/shangpin', (req, res) => {
        let imgs =req.body.imgs,name= req.body.name,status = req.body.status
        let brandId = req.body.brandId,sales = req.body.sales
        if(status !=1) status = 0//默认启用
        if (imgs) {
            let createTime = new Date().getTime()
            SQLHelper(`
                INSERT INTO product(sales,imgs,name,status,state,createTime,unitId,brandId) 
                VALUES ('${sales}','${imgs}','${name}','${status}',1,${createTime},'juzao','${brandId}')
                `).then(ret => {
                res.send(ret.insertId ? {_id:ret.insertId} : {errorMsg:"新增数据失败"})
            })
        } else {
            res.send({ errorMsg: '传入参数错误' })
        }
    })

//修改商品项目
//indexId 主码_id 必填
 app.put('/admin/shangpin/shangpin',(req,res) => { 
    if (req.body.indexId) {
        let updateTime = new Date().getTime()
        let updateKey = ['imgs','sales','name','brandId','status']
        let updateValues = [`updateTime=${updateTime}`]
        for(let i=0;i<updateKey.length;i++){
            let key = updateKey[i], value = req.body[key]
            if(value !== undefined) updateValues.push(`${key}='${value}'`)
        }
        SQLHelper(`UPDATE product set ${updateValues.join(',')} WHERE _id = ${req.body.indexId}`).then(ret => {
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

//删除 逻辑删
//indexId 主码_id 必填
app.delete('/admin/shangpin/shangpin',(req,res) =>{
    let indexId = req.query.indexId
    if(indexId){
        SQLHelper(`
        UPDATE product
        set state = 0
        WHERE _id = ${indexId}
        `).then(ret =>{
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

    

}